#include <iostream>
#include "PThread.hpp"
#include <unordered_map>
#include <memory>


// 传多个参数
class threaddata
{
public:
	int _max;
	int _start;
};

void cons(threaddata td)
{
	while (td._max)
	{
		std::cout << "hello word" << std::endl;
		std::cout << td._max << std::endl;
		sleep(1);
	}
}

int main()
{
	threaddata td;
	td._max = 10;
	td._start = 60;
	Threadnode::thread<threaddata> it(cons, td);
	it.start();
	// std::cout << (int)it.status() << std::endl;
	it.join();
	return 0;
}

//--------------------------------------------------------------------
// 传一个参数
// void cons(int max)
// {
// 	while (max--)
// 	{
// 		std::cout << "hello word" << std::endl;
// 		std::cout << max << std::endl;
// 		sleep(1);
// 	}
// }

// int main()
// {
// 	Threadnode::thread<int> it(cons, 10);
// 	it.start();
// 	// std::cout << (int)it.status() << std::endl;
// 	it.join();
// 	return 0;
// }

//-------------------------------------------------------------------------
// 创建多个进程
// #define NUM 10
// using thread_ptr_t = std::shared_ptr<Threadnode::thread<int>>;

// int main()
// {
// 	std::unordered_map<std::string, thread_ptr_t> Threads;

// 	for(int i = 0;i < NUM;i++)
// 	{
// 		thread_ptr_t t  = std::make_shared<Threadnode::thread<int>>([](){
// 			while(true)
// 			{
// 				std::cout << "hello word" << std::endl;
// 				sleep(1);
// 			}
// 		},10);
// 		Threads[t->name()] = t;
// 	}

// 	for(auto &Thread : Threads)
// 	{
// 		Thread.second->start();
// 	}

// 	for(auto &Thread : Threads)
// 	{
// 		Thread.second->join();
// 	}

// 	// Threadnode::thread it([](){
// 	// 	while(true)
// 	// 	{
// 	// 		std::cout << "hello word" << std::endl;
// 	// 		sleep(1);
// 	// 	}
// 	// });
// 	// it.start();

// 	// // std::cout << it.tid() << std::endl;

// 	// // sleep(5);
// 	// // it.stop();
// 	// std::cout << (int)it.status() << std::endl;
// 	// // std::cout << it.ISjoinabl() << std::endl;

// 	// // sleep(5);
// 	// // it.join();
// 	// it.detach();
// 	// std::cout << it.ISjoinabl() << std::endl;
// 	// std::cout << it.join() << std::endl;
// 	// while(true)
// 	// {
// 	// 	std::cout << "main thread" << std::endl;
// 	// 	sleep(1);
// 	// }
// 	return 0;
// }
